package inge_soft.gestoriusNuevo.business.controller.implementation;

import inge_soft.gestoriusNuevo.business.service.abstraction.IInstitucionService;
import inge_soft.gestoriusNuevo.persistence.entity.implementation.Institucion;
import inge_soft.gestoriusNuevo.support.SecurityUtil;

import java.util.HashMap;
import java.util.List;

import org.zkoss.bind.annotation.BindingParam;
import org.zkoss.bind.annotation.Command;
import org.zkoss.bind.annotation.GlobalCommand;
import org.zkoss.bind.annotation.Init;
import org.zkoss.bind.annotation.NotifyChange;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.Sessions;
import org.zkoss.zk.ui.select.annotation.VariableResolver;
import org.zkoss.zk.ui.select.annotation.WireVariable;
import org.zkoss.zul.Window;

@VariableResolver(org.zkoss.zkplus.spring.DelegatingVariableResolver.class)
public class MisInstitucionesViewModel {

	@WireVariable("institucionService")
	private IInstitucionService servicioInstitucion;
	
	private String nombreUsuario;
	private String mensajeEliminar;
	private Institucion institucionSeleccionada;
	private List<Institucion> listaInstituciones;

	@Init
    public void inicializar() {

		nombreUsuario = SecurityUtil.getUserName();
		// obtengo las instituciones asociadas al usuario
		listaInstituciones = servicioInstitucion.obtenerInstituciones(nombreUsuario);
    }
	
	/*private List<Institucion> inventarListaInstituciones() {
		List<Institucion> listaInstitucion = new ArrayList<Institucion>();
		
		EstadoInstitucion estadoInstitucion = new EstadoInstitucion();
		estadoInstitucion.setEstado("Activa");
		
		TipoDomicilio tipoDomicilio = new TipoDomicilio();
		tipoDomicilio.setTipo("Legal");
		
		Domicilio domicilio = new Domicilio();
		domicilio.setCalle("calleee");
		domicilio.setNumero("1214");
		
		Pais pais = new Pais();
		pais.setNombre("Argentina");
		
		Provincia provincia = new Provincia();
		provincia.setNombre("Chubut");
		provincia.setPais(pais);
		
		Localidad localida = new Localidad();
		localida.setNombre("cholila");
		localida.setProvincia(provincia);
		
		domicilio.setLocalidad(localida);
		
		DomicilioTipificado domicilioTipificado = new DomicilioTipificado();
		domicilioTipificado.setDomicilio(domicilio);
		domicilioTipificado.setTipoDomicilio(tipoDomicilio);
		
		List<DomicilioTipificado> listaDomiciliosTipificados = new ArrayList<DomicilioTipificado>();
		listaDomiciliosTipificados.add(domicilioTipificado);
		
		Institucion institucion = new Institucion();
		institucion.setDomicilios(listaDomiciliosTipificados);
		institucion.setEstado(estadoInstitucion);
		institucion.setNombreFantasia("nombre fanta");
		institucion.setRazonSocial("razon social");
		institucion.setCuit("20-12345678-7");
		
		listaInstitucion.add(institucion);
		return listaInstitucion;
	}*/
	
	public String getNombreUsuario() {
		return nombreUsuario;
	}

	/*public void setNombreUsuario(String nombreUsuario) {
		this.nombreUsuario = nombreUsuario;
	}*/

	public Institucion getInstitucionSeleccionada() {
		return institucionSeleccionada;
	}

	public void setInstitucionSeleccionada(Institucion institucionSeleccionada) {
		this.institucionSeleccionada = institucionSeleccionada;
	}

	public String getMensajeEliminar() {
		return mensajeEliminar;
	}

	public void setMensajeEliminar(String mensajeEliminar) {
		this.mensajeEliminar = mensajeEliminar;
	}
	
	public List<Institucion> getListaInstituciones() {
		return listaInstituciones;
	}

	public void setListaInstituciones(List<Institucion> listaInstituciones) {
		this.listaInstituciones = listaInstituciones;
	}
	
	@Command
	public void editarInstitucion(@BindingParam("institucion") Institucion institucion) {
		if (institucion == null) {
			return;
		}
		Sessions.getCurrent().setAttribute("Institucion", institucion);
		Executions.getCurrent().sendRedirect("index.zul?destino=CrearYmodificarInstitucion.zul","");
		
		
	}
	
	@GlobalCommand @NotifyChange("listaInstituciones")
	public void cerraronDialogo() {
		//DEPURACION
		System.out.println("cerraron dialogueteeee");
		//DEPURACION
		
		this.setListaInstituciones(servicioInstitucion.obtenerInstituciones(nombreUsuario));
	}
	
	@Command @NotifyChange("mensajeEliminar")
	public void eliminarInstitucion() {
		mensajeEliminar = null;
		// seria eliminar institucion (logica en el servicio)
		//servicioInstitucion.modificarInstitucion(nickUsuario, institucionModificada)
	}
	
	@Command
	public void nuevaInstitucion() {
		Sessions.getCurrent().setAttribute("Institucion", null); // Solo para asegurarme que va a llegar en null si va por nueva institucion
		Executions.getCurrent().sendRedirect("index.zul?destino=CrearYmodificarInstitucion.zul","");
	}

	
	@Command @NotifyChange("mensajeEliminar")
	public void deseaEliminar(@BindingParam("institucion") Institucion institucion) {
		if (institucion != null) {
			mensajeEliminar = "¿Esta seguro que quiere eliminar la institucion con Razon Social " + institucion.getRazonSocial() + " ?";
		}
	}
	
	@Command @NotifyChange("mensajeEliminar")
	public void cancelarEliminar() {
		mensajeEliminar = null;
	}
	
	@Command
	public void cerrar() {
		// envio redireccion al panel de contenido de "index.zul"
		Executions.getCurrent().sendRedirect("index.zul?destino=Bienvenido.zul","");
	}
	
	@Command
	public void irEventos(@BindingParam("institucion") Institucion institucion){
		Sessions.getCurrent().setAttribute("institucionArg",institucion);
		Executions.getCurrent().sendRedirect("index.zul?destino=Eventos.zul","");
	}
}
